home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Database How-To / Visual Basic 4 Database - How-to (The Waite Group)(1995).iso / relater.fr_ / relater.fr
Text File  |  1995-03-09  |  20KB  |  584 lines

  1. VERSION 4.00
  2. Begin VB.Form Form1 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Relation Creator"
  5.    ClientHeight    =   4590
  6.    ClientLeft      =   510
  7.    ClientTop       =   1395
  8.    ClientWidth     =   7755
  9.    BeginProperty Font 
  10.       name            =   "MS Sans Serif"
  11.       charset         =   1
  12.       weight          =   700
  13.       size            =   8.25
  14.       underline       =   0   'False
  15.       italic          =   0   'False
  16.       strikethrough   =   0   'False
  17.    EndProperty
  18.    Height          =   4995
  19.    Left            =   450
  20.    LinkTopic       =   "Form1"
  21.    ScaleHeight     =   4590
  22.    ScaleWidth      =   7755
  23.    Top             =   1050
  24.    Width           =   7875
  25.    Begin VB.CommandButton cmdCreateRelations 
  26.       Caption         =   "Create &Relations"
  27.       Enabled         =   0   'False
  28.       Height          =   495
  29.       Left            =   2100
  30.       TabIndex        =   7
  31.       Top             =   1500
  32.       Width           =   2055
  33.    End
  34.    Begin VB.ListBox lstTables 
  35.       Height          =   1980
  36.       Left            =   180
  37.       TabIndex        =   4
  38.       Top             =   660
  39.       Width           =   1695
  40.    End
  41.    Begin VB.CommandButton cmdCreateTable 
  42.       Caption         =   "--> Create &Table -->"
  43.       Enabled         =   0   'False
  44.       Height          =   495
  45.       Left            =   2100
  46.       TabIndex        =   2
  47.       Top             =   840
  48.       Width           =   2055
  49.    End
  50.    Begin VB.CommandButton cmdClose 
  51.       Cancel          =   -1  'True
  52.       Caption         =   "Cl&ose"
  53.       Height          =   495
  54.       Left            =   2100
  55.       TabIndex        =   1
  56.       Top             =   2160
  57.       Width           =   2055
  58.    End
  59.    Begin VB.CommandButton cmdCreateDatabase 
  60.       Caption         =   "&Create &Database"
  61.       Height          =   495
  62.       Left            =   2100
  63.       TabIndex        =   0
  64.       Top             =   180
  65.       Width           =   2055
  66.    End
  67.    Begin VB.Label Label3 
  68.       AutoSize        =   -1  'True
  69.       BackColor       =   &H00C0C0C0&
  70.       Caption         =   "Relationships:"
  71.       Height          =   195
  72.       Left            =   300
  73.       TabIndex        =   9
  74.       Top             =   2880
  75.       Width           =   1215
  76.    End
  77.    Begin MSGrid.Grid grdRelationships 
  78.       Height          =   1020
  79.       Left            =   300
  80.       TabIndex        =   8
  81.       Top             =   3180
  82.       Width           =   7170
  83.       _version        =   65536
  84.       _extentx        =   12647
  85.       _extenty        =   1799
  86.       _stockprops     =   77
  87.       backcolor       =   16777215
  88.       fixedcols       =   0
  89.    End
  90.    Begin VB.Label Label2 
  91.       AutoSize        =   -1  'True
  92.       BackColor       =   &H00C0C0C0&
  93.       Caption         =   "Created Tables, Fields, and Indexes:"
  94.       Height          =   195
  95.       Left            =   4380
  96.       TabIndex        =   6
  97.       Top             =   360
  98.       Width           =   3135
  99.    End
  100.    Begin VB.Label Label1 
  101.       AutoSize        =   -1  'True
  102.       BackColor       =   &H00C0C0C0&
  103.       Caption         =   "Available Tables:"
  104.       Height          =   195
  105.       Left            =   180
  106.       TabIndex        =   5
  107.       Top             =   360
  108.       Width           =   1485
  109.    End
  110.    Begin MSOutl.Outline outTablesAndFields 
  111.       Height          =   1995
  112.       Left            =   4380
  113.       TabIndex        =   3
  114.       Top             =   660
  115.       Width           =   3135
  116.       _version        =   65536
  117.       _extentx        =   5530
  118.       _extenty        =   3519
  119.       _stockprops     =   77
  120.       backcolor       =   16777215
  121.       pictureplus     =   "RELATER.frx":0000
  122.       pictureminus    =   "RELATER.frx":0172
  123.       pictureleaf     =   "RELATER.frx":02E4
  124.       pictureopen     =   "RELATER.frx":0456
  125.       pictureclosed   =   "RELATER.frx":05C8
  126.    End
  127.    Begin MSComDlg.CommonDialog CommonDialog1 
  128.       Left            =   1620
  129.       Top             =   60
  130.       _version        =   65536
  131.       _extentx        =   847
  132.       _extenty        =   847
  133.       _stockprops     =   0
  134.       cancelerror     =   -1  'True
  135.       defaultext      =   "MDB"
  136.       dialogtitle     =   "Create New Database"
  137.       filter          =   "Microsoft Acccess (*.MDB)|*.MDB"
  138.       flags           =   5000
  139.    End
  140. End
  141. Attribute VB_Name = "Form1"
  142. Attribute VB_Creatable = False
  143. Attribute VB_Exposed = False
  144. Option Explicit
  145.  
  146. ' Declare the text field lengths as constants
  147. Private Const LEN_Customer_Name = 40
  148. Private Const LEN_Street_Address = 80
  149. Private Const LEN_City = 25
  150. Private Const LEN_State = 2
  151. Private Const LEN_Zip_Code = 10
  152. Private Const LEN_Country = 25
  153. Private Const LEN_Item_Number = 16
  154. Private Const LEN_Item_Description = 100
  155.  
  156. ' Declare the database at form level.
  157. Dim db As Database
  158.  
  159. Private Sub cmdCreateDatabase_Click()
  160.     Dim fn As String
  161.     Dim tblDef As TableDef
  162.     
  163.     On Error GoTo CreateError
  164.     
  165.     ' Set the filename to a null string and display the common dialog box.
  166.     CommonDialog1.FileName = ""
  167.     CommonDialog1.ShowSave
  168.  
  169.     ' The user entered a filename for the new database. Assign it to the variable fn.
  170.     Screen.MousePointer = 11
  171.     fn = CommonDialog1.FileName
  172.  
  173.     ' Create the new database file.
  174.     Set db = DBEngine.Workspaces(0).CreateDatabase(fn, dbLangGeneral)
  175.     Screen.MousePointer = 0
  176.  
  177.     ' Verify that the file now exists on disk.
  178.     If Dir(fn) = CommonDialog1.FileTitle Then
  179.     
  180.         ' The file exists, so display a message.
  181.         Form1.Caption = "Relation Creator for " & UCase$(fn)
  182.         
  183.         ' Clear the existing list and outline
  184.         lstTables.Clear
  185.         outTablesAndFields.Clear
  186.         
  187.         ' Fill the list box with the sample tables
  188.         lstTables.AddItem "Customers"
  189.         lstTables.AddItem "Items"
  190.         lstTables.AddItem "Order Items"
  191.         lstTables.AddItem "Orders"
  192.         
  193.         ' If a table already exists in the database, remove it from the
  194.         ' list and add it to the outline.
  195.         For Each tblDef In db.TableDefs
  196.             Select Case tblDef.Name
  197.                 Case "Customers"
  198.                     RemoveFromList "Customers"
  199.                     AddToOutline "Customers"
  200.                 Case "Orders"
  201.                     RemoveFromList "Orders"
  202.                     AddToOutline "Orders"
  203.                 Case "Items"
  204.                     RemoveFromList "Items"
  205.                     AddToOutline "Items"
  206.                 Case "Order Items"
  207.                     RemoveFromList "Order Items"
  208.                     AddToOutline "Order Items"
  209.                 Case Else
  210.             End Select
  211.         Next
  212.             
  213.         ' Enable the Create Table features and disable Create Relationships.
  214.         cmdCreateTable.Enabled = True
  215.         cmdCreateRelations.Enabled = False
  216.         
  217.     Else
  218.         MsgBox "Could not create " & fn, vbExclamation
  219.     End If
  220. Exit Sub
  221.  
  222. CreateError:
  223.     Screen.MousePointer = 0
  224.     If Err.Number = 32755 Then
  225.         ' The user cancelled the dialog box, so do nothing.
  226.     Else
  227.         ' Some other error, so show the user the description.
  228.         MsgBox Err.Description
  229.     End If
  230. Exit Sub
  231. End Sub
  232.  
  233.  
  234. Private Sub cmdCreateTable_Click()
  235.     Dim tableName As String
  236.     Dim tblDef As TableDef
  237.     
  238.     On Error GoTo TableCreateError
  239.     
  240.     If lstTables.ListIndex > -1 Then
  241.     
  242.         ' The user has a table selected, so create a new table definition
  243.         ' in the database with the name of the table.
  244.         Screen.MousePointer = 11
  245.         Set tblDef = db.CreateTableDef(lstTables.Text)
  246.         
  247.         ' Now add the appropriate fields to the table.
  248.         AddFields tblDef
  249.        
  250.         ' Next the primary key to the table.
  251.         AddPrimaryKey tblDef
  252.         
  253.         ' Add other indexes
  254.         AddOtherIndexes tblDef
  255.         
  256.         ' With all the fields in place, append the table defintion to the database.
  257.         db.TableDefs.Append tblDef
  258.         
  259.         ' Take the list off the list of available tables.
  260.         tableName = lstTables.Text
  261.         RemoveFromList tableName
  262.         
  263.         ' Put the table and its fields into the outline of tables in the database.
  264.         AddToOutline tableName
  265.     End If
  266.     
  267.     ' If the user has added all the tables, enable the Create Relationshops button.
  268.     If lstTables.ListCount = 0 Then cmdCreateRelations.Enabled = True
  269.     Screen.MousePointer = 0
  270.     
  271. Exit Sub
  272.  
  273. TableCreateError:
  274.     Screen.MousePointer = 0
  275.     MsgBox Err.Description
  276. Exit Sub
  277.  
  278. End Sub
  279. Sub AddFields(tblDef As TableDef)
  280.  
  281.     Dim fldDef As Field
  282.     
  283.     ' For each field, first create the field TableDef
  284.     ' Then add it to the field list for the table
  285.     Select Case tblDef.Name
  286.         Case "Customers"
  287.             Set fldDef = tblDef.CreateField("Customer Number", dbLong)
  288.             tblDef.Fields.Append fldDef
  289.             Set fldDef = tblDef.CreateField("Customer Name", dbText, LEN_Customer_Name)
  290.             tblDef.Fields.Append fldDef
  291.             Set fldDef = tblDef.CreateField("Street Address", dbText, LEN_Street_Address)
  292.             tblDef.Fields.Append fldDef
  293.             Set fldDef = tblDef.CreateField("City", dbText, LEN_City)
  294.             tblDef.Fields.Append fldDef
  295.             Set fldDef = tblDef.CreateField("State", dbText, LEN_State)
  296.             tblDef.Fields.Append fldDef
  297.             Set fldDef = tblDef.CreateField("Zip Code", dbText, LEN_Zip_Code)
  298.             tblDef.Fields.Append fldDef
  299.             Set fldDef = tblDef.CreateField("Country", dbText, LEN_Country)
  300.             tblDef.Fields.Append fldDef
  301.         Case "Items"
  302.             Set fldDef = tblDef.CreateField("Item Number", dbText, LEN_Item_Number)
  303.             tblDef.Fields.Append fldDef
  304.             Set fldDef = tblDef.CreateField("Item Description", dbText, LEN_Item_Description)
  305.             tblDef.Fields.Append fldDef
  306.             Set fldDef = tblDef.CreateField("Price Each", dbCurrency)
  307.             tblDef.Fields.Append fldDef
  308.         Case "Orders"
  309.             Set fldDef = tblDef.CreateField("Customer Number", dbLong)
  310.             tblDef.Fields.Append fldDef
  311.             Set fldDef = tblDef.CreateField("Order Number", dbLong)
  312.             tblDef.Fields.Append fldDef
  313.             Set fldDef = tblDef.CreateField("Order Date", dbDate)
  314.             tblDef.Fields.Append fldDef
  315.             Set fldDef = tblDef.CreateField("Ship Date", dbDate)
  316.             tblDef.Fields.Append fldDef
  317.             Set fldDef = tblDef.CreateField("Tax", dbCurrency)
  318.             tblDef.Fields.Append fldDef
  319.             Set fldDef = tblDef.CreateField("Shipping Charge", dbCurrency)
  320.             tblDef.Fields.Append fldDef
  321.         Case "Order Items"
  322.             Set fldDef = tblDef.CreateField("Order Number", dbLong)
  323.             tblDef.Fields.Append fldDef
  324.             Set fldDef = tblDef.CreateField("Item Number", dbText, LEN_Item_Number)
  325.             tblDef.Fields.Append fldDef
  326.             Set fldDef = tblDef.CreateField("Quantity", dbLong)
  327.             tblDef.Fields.Append fldDef
  328.     End Select
  329.  
  330. End Sub
  331. Sub AddPrimaryKey(tblDef As TableDef)
  332.     Dim idx As Index
  333.     Dim idxField1 As Field, idxField2 As Field
  334.     
  335.     ' Create the index.
  336.     Set idx = tblDef.CreateIndex("PrimaryKey")
  337.     
  338.     ' Define the field(s) for the index
  339.     Select Case tblDef.Name
  340.         Case "Customers"
  341.             Set idxField1 = idx.CreateField("Customer Number")
  342.         Case "Items"
  343.             Set idxField1 = idx.CreateField("Item Number")
  344.         Case "Orders"
  345.             Set idxField1 = idx.CreateField("Order Number")
  346.         Case "Order Items"
  347.             Set idxField1 = idx.CreateField("Order Number")
  348.             Set idxField2 = idx.CreateField("Item Number")
  349.     End Select
  350.     idx.Fields.Append idxField1
  351.     If tblDef.Name = "Order Items" Then idx.Fields.Append idxField2
  352.     
  353.     idx.Primary = True
  354.     tblDef.Indexes.Append idx
  355. End Sub
  356. Sub AddOtherIndexes(tblDef As TableDef)
  357.     Dim idx As Index
  358.     Dim idxField1 As Field, idxField2 As Field
  359.     
  360.     
  361.     ' Create the indexes, define the field(s) and properties
  362.     Select Case tblDef.Name
  363.     
  364.         Case "Customers"
  365.         
  366.             ' Define the Customer Name index as a required index.
  367.             Set idx = tblDef.CreateIndex("Customer Name")
  368.             Set idxField1 = idx.CreateField("Customer Name")
  369.             idx.Fields.Append idxField1
  370.             idx.Required = True
  371.             tblDef.Indexes.Append idx
  372.             
  373.             ' Define the City And State index as a required index.
  374.             Set idx = tblDef.CreateIndex("City And State")
  375.             Set idxField1 = idx.CreateField("State")
  376.             Set idxField2 = idx.CreateField("City")
  377.             idx.Fields.Append idxField1
  378.             idx.Fields.Append idxField2
  379.             idx.Required = True
  380.             tblDef.Indexes.Append idx
  381.             
  382.             ' Define the Zip index as a required index.
  383.             Set idx = tblDef.CreateIndex("Zip")
  384.             Set idxField1 = idx.CreateField("Zip Code")
  385.             idx.Fields.Append idxField1
  386.             idx.Required = True
  387.             tblDef.Indexes.Append idx
  388.             
  389.         Case "Items"
  390.         
  391.             ' Define the City And State index as a required and unique index.
  392.             Set idx = tblDef.CreateIndex("Item Description")
  393.             Set idxField1 = idx.CreateField("Item Description")
  394.             idx.Fields.Append idxField1
  395.             idx.Required = True
  396.             idx.Unique = True
  397.             tblDef.Indexes.Append idx
  398.             
  399.         Case "Orders"
  400.         
  401.             ' Define the Customer Number index as a required index.
  402.             Set idx = tblDef.CreateIndex("Customer Number")
  403.             Set idxField1 = idx.CreateField("Customer Number")
  404.             idx.Fields.Append idxField1
  405.             idx.Required = True
  406.             tblDef.Indexes.Append idx
  407.             
  408.             ' Define the Order Date index as a required index.
  409.             Set idx = tblDef.CreateIndex("Order Date")
  410.             Set idxField1 = idx.CreateField("Order Date")
  411.             idx.Fields.Append idxField1
  412.             idx.Required = True
  413.             tblDef.Indexes.Append idx
  414.             
  415.             ' Define the Ship Date index as a non-required index.
  416.             Set idx = tblDef.CreateIndex("Ship Date")
  417.             Set idxField1 = idx.CreateField("Ship Date")
  418.             idx.Fields.Append idxField1
  419.             tblDef.Indexes.Append idx
  420.             
  421.         Case "Order Items"
  422.         
  423.             ' Define the Item Number index.
  424.             ' The field is already part of the Primary Key, so no need to define it as required.
  425.             Set idx = tblDef.CreateIndex("Item Number")
  426.             Set idxField1 = idx.CreateField("Item Number")
  427.             idx.Fields.Append idxField1
  428.             tblDef.Indexes.Append idx
  429.             
  430.             ' Define the Order Number index.
  431.             ' The field is already part of the Primary Key, so no need to define it as required.
  432.             Set idx = tblDef.CreateIndex("Order Number")
  433.             Set idxField1 = idx.CreateField("Order Number")
  434.             idx.Fields.Append idxField1
  435.             tblDef.Indexes.Append idx
  436.             
  437.     End Select
  438. End Sub
  439.  
  440. Private Sub cmdCreateRelations_Click()
  441.     Dim relate As Relation
  442.     Dim fld As Field
  443.     
  444.     On Error GoTo RelationshipsError
  445.     
  446.     Screen.MousePointer = 11
  447.     
  448.     Set relate = db.CreateRelation("First")
  449.     relate.Table = "Customers"
  450.     relate.ForeignTable = "Orders"
  451.     Set fld = relate.CreateField("Customer Number")
  452.     fld.ForeignName = "Customer Number"
  453.     relate.Fields.Append fld
  454.     db.Relations.Append relate
  455.     grdRelationships.AddItem relate.Table & Chr$(9) & relate.ForeignTable & Chr$(9) & fld.Name & Chr$(9) & IIf(relate.Attributes = dbRelationDeleteCascade, "Yes", "No")
  456.     
  457.     Set relate = db.CreateRelation("Second")
  458.     relate.Table = "Orders"
  459.     relate.ForeignTable = "Order Items"
  460.     Set fld = relate.CreateField("Order Number")
  461.     fld.ForeignName = "Order Number"
  462.     relate.Fields.Append fld
  463.     relate.Attributes = dbRelationDeleteCascade
  464.     db.Relations.Append relate
  465.     grdRelationships.AddItem relate.Table & Chr$(9) & relate.ForeignTable & Chr$(9) & fld.Name & Chr$(9) & IIf(relate.Attributes = dbRelationDeleteCascade, "Yes", "No")
  466.  
  467.     Set relate = db.CreateRelation("Third")
  468.     relate.Table = "Items"
  469.     relate.ForeignTable = "Order Items"
  470.     Set fld = relate.CreateField("Item Number")
  471.     fld.ForeignName = "Item Number"
  472.     relate.Fields.Append fld
  473.     relate.Attributes = dbRelationDeleteCascade
  474.     db.Relations.Append relate
  475.     grdRelationships.AddItem relate.Table & Chr$(9) & relate.ForeignTable & Chr$(9) & fld.Name & Chr$(9) & IIf(relate.Attributes = dbRelationDeleteCascade, "Yes", "No")
  476.     
  477.     grdRelationships.RemoveItem 1
  478.     
  479.     Screen.MousePointer = 0
  480.     
  481. Exit Sub
  482.  
  483. RelationshipsError:
  484.     Screen.MousePointer = 0
  485.     MsgBox Err.Description, vbExclamation
  486. Exit Sub
  487.  
  488. End Sub
  489.  
  490. Private Sub Form_Load()
  491.     grdRelationships.Cols = 4
  492.     grdRelationships.ColWidth(0) = 1700
  493.     grdRelationships.ColWidth(1) = 1700
  494.     grdRelationships.ColWidth(2) = 1700
  495.     grdRelationships.ColWidth(3) = 2000
  496.     
  497.     grdRelationships.Row = 0
  498.     grdRelationships.Col = 0
  499.     grdRelationships.Text = "Base Table"
  500.     grdRelationships.Col = 1
  501.     grdRelationships.Text = "Related Table"
  502.     grdRelationships.Col = 2
  503.     grdRelationships.Text = "Field"
  504.     grdRelationships.Col = 3
  505.     grdRelationships.Text = "Cascade Deletes?"
  506.  
  507. End Sub
  508.  
  509.  
  510. Private Sub lstTables_DblClick()
  511.     cmdCreateTable_Click
  512. End Sub
  513. Sub RemoveFromList(tableName As String)
  514.     Dim i As Integer
  515.     
  516.     ' Find the table passed as the argument in the list and remove it from the list.
  517.     For i = 0 To lstTables.ListCount - 1
  518.         If lstTables.List(i) = tableName Then
  519.             lstTables.RemoveItem i
  520.             Exit For
  521.         End If
  522.     Next i
  523.     
  524. End Sub
  525. Sub AddToOutline(tableName As String)
  526.     Dim tableIndex As Integer
  527.     Dim headerIndex As Integer
  528.     Dim subHeaderIndex As Integer
  529.     Dim tblDef As TableDef
  530.     Dim idx As Index
  531.     Dim i As Integer, j As Integer
  532.     Dim trailer As String
  533.  
  534.     ' Indicate that the table name is to be added at the top level of the outline.
  535.     outTablesAndFields.ListIndex = -1
  536.     
  537.     ' Add the table to the outline.
  538.     outTablesAndFields.AddItem tableName
  539.     
  540.     ' Store the just-added table's ListIndex property in a variable.
  541.     tableIndex = outTablesAndFields.ListCount - 1
  542.     Set tblDef = db.TableDefs(tableName)
  543.     
  544.     ' Add each field in the table to the outline as a subitem of the table name.
  545.     outTablesAndFields.ListIndex = tableIndex
  546.     outTablesAndFields.AddItem "Fields"
  547.     headerIndex = outTablesAndFields.ListCount - 1
  548.     For i = 0 To tblDef.Fields.Count - 1
  549.         outTablesAndFields.ListIndex = headerIndex
  550.         outTablesAndFields.AddItem tblDef.Fields(i).Name
  551.     Next i
  552.     
  553.     ' Add each index in the table to the outline as a subitem of the table name.
  554.     outTablesAndFields.ListIndex = tableIndex
  555.     outTablesAndFields.AddItem "Indexes"
  556.     headerIndex = outTablesAndFields.ListCount - 1
  557.     For i = 0 To tblDef.Indexes.Count - 1
  558.         outTablesAndFields.ListIndex = headerIndex
  559.         Set idx = tblDef.Indexes(i)
  560.         If idx.Primary Then
  561.             trailer = " [P]"
  562.         ElseIf idx.Required And idx.Unique Then
  563.             trailer = " [R,U]"
  564.         ElseIf idx.Required Then
  565.             trailer = " [R]"
  566.         ElseIf idx.Unique Then
  567.             trailer = " [U]"
  568.         Else
  569.             trailer = ""
  570.         End If
  571.         outTablesAndFields.AddItem idx.Name & trailer
  572.         subHeaderIndex = outTablesAndFields.ListCount - 1
  573.         For j = 0 To idx.Fields.Count - 1
  574.             outTablesAndFields.ListIndex = subHeaderIndex
  575.             outTablesAndFields.AddItem idx.Fields(j).Name
  576.         Next j
  577.     Next i
  578.  
  579. End Sub
  580. Private Sub cmdClose_Click()
  581.     End
  582. End Sub
  583.  
  584.